// 用户注册方法

const res = require('express/lib/response')
const user = require('../sql/index')
const nodemailer = require('nodemailer')
// 密码加密协议
const bcrypt = require('bcryptjs')

// 邮件发送方
var mailTransport = nodemailer.createTransport({
  host : 'smtp.sina.com',
  secureConnection: true,
  auth : {
      user : '16696124022m@sina.cn',
      pass : '65cbdbde0f8e9600'
  },
});

// 随即生成6位验证码通过邮件发送用户
const stringRandom = require('string-random');
let emailCheck = stringRandom(6)

// 随注册将默认头像写入数据库
const defaultPic = ''

// 最终注册,注册信息写入数据库
// 必需数据 "username" "password" "email" "phoneNumber" "userType" "plateNumber1"
exports.userRegister = (req,res)=>{
  const userinfo = req.body
  const sql = 'insert into user set ?'

  const sqlStr = 'select * from user where userAccount=?'
  let userAccount = Math.floor((Math.random()+Math.floor(Math.random()*9+1))*Math.pow(10,9));
  let flagTemp = false
  while(flagTemp){
    user.query(sqlStr,userAccount,(err,results)=>{
      if(results.length > 0){
        userAccount = Math.floor((Math.random()+Math.floor(Math.random()*9+1))*Math.pow(10,9));
      }
      else{
        flagTemp = true
      }
    })
  }

  userinfo.password=bcrypt.hashSync(userinfo.password,10)

  var date = new Date();

  const registrationTime = date.getFullYear()+"-"+date.getMonth()+"-"+date.getDay()

  user.query(sql,{
    username:userinfo.username,
    password:userinfo.password,
    email:userinfo.email,
    userAccount : userAccount,
    phoneNumber:userinfo.phoneNumber,
    userPic: defaultPic,
    userType:userinfo.userType,
    registrationTime:registrationTime,
    plateNumber1 : userinfo.plateNumber1,
    plateNumber1_balance : '0',
    balance : '0'},(err,results)=>{
    if(err) 
        return res.cc(err)
    if(results.affectedRows !== 1) 
        return res.cc('注册用户失败，请稍后再试！')
    res.send({
      status : 0,
      message : '注册成功!',
      userAccount : userAccount
    })
  })
}

// 邮箱验证，发送给用户邮箱验证码
exports.userEmailCheck = (req,res) => {
  const userinfo = req.body
  // console.log(userinfo.email);
  var options = {
    from        : '"吴彦祖停车场管理系统" <16696124022m@sina.cn>',
    to          : `"尊敬的用户：" <` + userinfo.email + `>`,
    subject        : '这是一封来自吴彦祖停车场管理系统的邮件',
    text          : '这是一封来自吴彦祖停车场管理系统的邮件',
    html           : `<div style="background-color: dimgray;">
    <h4 style="color: white;">欢迎使用吴彦祖停车场管理系统</h4>
    <h4 style="color: white;">您的邮箱验证码为：</h4>
    <br>
    <br>
    <h1 style="color: blue;font-size:40px">`+ emailCheck +`</h1>
    <br>
    <h4 style="color: white;">该邮件用于吴彦祖停车场管理系统用户验证使用</h4>
    <h4 style="color: white;">若非本人操作，请无视该邮件</h4>
    </div>`,
  };
  mailTransport.sendMail(options, function(err, msg){
      if(err){
          return res.cc(err)
      }
      else {
          console.log(msg);
          return res.send({
            status : 0,
            message : '邮箱验证码发送成功',
          })
      }
  });
}

// 邮箱验证码验证
exports.userCodeCheck = (req,res) =>{
  const userinfo = req.body

  // 校验不区分大小写
  if(req.body.code.toLowerCase() === emailCheck.toLowerCase())
    return res.send({
      status : 0,
      message : '验证码校验成功',
    })
  else 
    return res.cc("验证码校验失败")
}

exports.sendAgain = (req,res) => {
  emailCheck = stringRandom(6)
  const userinfo = req.body
  // console.log(userinfo.email);
  var options = {
    from        : '"吴彦祖停车场管理系统" <16696124022m@sina.cn>',
    to          : `"尊敬的用户：" <` + userinfo.email + `>`,
    subject        : '这是一封来自吴彦祖停车场管理系统的邮件',
    text          : '这是一封来自吴彦祖停车场管理系统的邮件',
    html           : `<div style="background-color: dimgray;">
    <h4 style="color: white;">欢迎使用吴彦祖停车场管理系统</h4>
    <h4 style="color: white;">您的邮箱验证码为：</h4>
    <br>
    <br>
    <h1 style="color: blue;font-size:40px">`+ emailCheck +`</h1>
    <br>
    <h4 style="color: white;">该邮件用于吴彦祖停车场管理系统用户验证使用</h4>
    <h4 style="color: white;">若非本人操作，请无视该邮件</h4>
    </div>`,
  };
  mailTransport.sendMail(options, function(err, msg){
      if(err){
          return res.cc(err)
      }
      else {
          console.log(msg);
          return res.send({
            status : 0,
            message : '邮箱验证码发送成功',
          })
      }
  });
}